- Published on
Nestjs 공식문서 부수기 [2]
NestJS의 공식문서를 보며 직접 따라해보고 배워보도록 하겠습니다. (NestJS, n.d.)
컨트롤러 [1]
컨트롤러는 들어오는 요청을 처리하고 클라이언트에 응답을 반환하는 역할을 합니다.
컨트롤러의 목적은 애플리케이션에 대한 특정 요청을 수신하는 것입니다. 라우팅 메커니즘 은 어떤 컨트롤러가 어떤 요청을 수신하는지 제어합니다. 종종 각 컨트롤러에는 둘 이상의 경로가 있으며 다른 경로는 다른 작업을 수행할 수 있습니다.
기본 컨트롤러를 만들기 위해 클래스와 데코레이터 를 사용 합니다. 데코레이터는 클래스를 필수 메타데이터와 연결하고 Nest가 라우팅 맵을 생성할 수 있도록 합니다
힌트 유효성 검사 가 내장 된 CRUD 컨트롤러를 빠르게 생성 하려면 CLI의 CRUD 생성기 를 사용할 수 있습니다 nest g resource [name].
라우팅
다음 예제에서는 기본 컨트롤러를 정의하는 데 필요한@Controller()
데코레이터를 사용합니다.
import { Controller, Get } from '@nestjs/common';
@Controller('cats')
export class CatsController {
@Get()
findAll(): string {
return 'This action returns all cats';
}
}
힌트 CLI를 사용하여 컨트롤러를 생성하려면 $ nest g controller cats명령을 실행하기만 하면 됩니다.
이렇게 하면 3000포트의 GET /cats
요청을 이 핸들러(findAll())에 매핑하여 This action returns all cats
가 출력됩니다.
@Get('profile')
과 같이 수정하면 GET /customers/profile
에 매핑됩니다.
요청 객체
핸들러는 종종 클라이언트 요청 세부 정보 에 액세스해야 합니다 . Nest는 기본 플랫폼의 요청 개체 에 대한 액세스를 제공합니다 (기본적으로 Express). @Req()
처리기의 서명에 데코레이터를 추가하여 요청 개체를 삽입하도록 Nest에 지시하여 요청 개체에 액세스할 수 있습니다 .
import { Controller, Get, Req } from '@nestjs/common';
import { Request } from 'express';
@Controller('cats')
export class CatsController {
@Get()
findAll(@Req() request: Request): string {
return 'This action returns all cats';
}
}
힌트 express타이핑 을 활용 하려면(위의 request: Request매개변수 예제에서와 같이) @types/express패키지를 설치하십시오.
요청 객체는 HTTP 요청을 나타내며 요청 쿼리 문자열, 매개변수, HTTP 헤더 및 본문에 대한 속성을 가지고 있습니다(자세한 내용은 여기 참조 ). 대부분의 경우 이러한 속성을 수동으로 가져올 필요가 없습니다. @Body()즉시 사용할 수 있는 또는 와 같은 전용 데코레이터를 대신 사용할 @Query()수 있습니다. 다음은 제공된 데코레이터와 이들이 나타내는 일반 플랫폼별 개체 목록입니다.
데코레이터 | 일반 플랫폼 별 개체 목록 |
---|---|
@Request(), @Req() | req |
@Response(), @Res()* | res |
@Next() | next |
@Session() | req.session |
@Param(key?: string) | req.params/req.params[key] |
@Body(key?: string) | req.body/req.body[key] |
@Query(key?: string) | req.query/req.query[key] |
@Headers(name?: string) | req.headers/req.headers[name] |
@Ip() | req.ip |
@HostParam() | req.hosts |
힌트 사용자 지정 데코레이터를 만드는 방법을 배우려면 여기를 방문하십시오.
리소스
POST 핸들러 를 생성해 보겠습니다 .
import { Controller, Get, Post } from '@nestjs/common';
@Controller('cats')
export class CatsController {
@Post()
create(): string {
return 'This action adds a new cat';
}
@Get()
findAll(): string {
return 'This action returns all cats';
}
}
Nest는 모든 표준 HTTP 메소드에 대한 데코레이터를 제공합니다.
@Get()
, @Post()
, @Put()
, @Delete()
, @Patch()
, @Options()
, @Head()
,@All()
모든 것을 처리하는 요청을 정의합니다.
라우트 와일드카드
패턴 기반 경로도 지원됩니다. 예를 들어 별표는 와일드카드로 사용되며 모든 문자 조합과 일치합니다.
@Get('ab*cd')
findAll() {
return 'This route uses a wildcard';
}
'ab*cd'
경로는, abcd
, ab_cd
, abecd
등과 일치합니다.
상태 코드
응답 상태 코드 는 201 인 POST 요청을 제외하고 기본적으로 항상 200 입니다. 핸들러 수준에서 데코레이터를 추가하여 이 동작을 쉽게 변경할 수 있습니다.
import { HttpCode } from '@nestjs/common';
@Post()
@HttpCode(204)
create() {
return 'This action adds a new cat';
}
헤더
import { Header } from '@nestjs/common';
@Post()
@Header('Cache-Control', 'none')
create() {
return 'This action adds a new cat';
}
리디렉션
url
, statusCode
둘 다 선택 사항입니다.
statusCode
를 생략하면 기본값 302
입니다
@Get()
@Redirect('https://nestjs.com', 301)
@Get('docs')
@Redirect('https://docs.nestjs.com', 302)
getDocs(@Query('version') version) {
if (version && version === '5') {
return { url: 'https://docs.nestjs.com/v5/' };
}
}